#include <stdio.h>

int main(int argc, char const *argv[])
{
    FILE *fp1, *fp2;
    fp1 = fopen("file1.dat", "r");
    fp2 = fopen("file2.dat", "w");
    // 第一遍将文件内容打印到屏幕上
    while (!feof(fp1))
    {
        char ch = fgetc(fp1);
        if (ch != EOF)
            putchar(ch);
    }
    /* 关于feof函数的编程要点：
    当读取完最后一个字符时，feof(fp1)不会立即返回true，
    而是需要再读取一个字符遇到了文件结尾标准EOF后，
    feof才会返回true。
    因此，feof(fp1)返回假，fgetc()仍有可能读到EOF字符，
    所以需要额外判断一下读入的ch是否是EOF，不是EOF再输出。
    */

    // 重置fp1的文件指针
    rewind(fp1);
    // 第二遍将文件内容写入另一个文件(不使用feof函数)
    char ch = fgetc(fp1);
    while (ch != EOF)
    {
        fputc(ch, fp2);
        ch = fgetc(fp1);
    }
    fclose(fp1); fclose(fp2);
    return 0;
}